package com.spring.IoCStudy_03;

import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;

@Controller
public class UserController {

    /*
    引用数据类型的注入
    回忆xml方式：
    <bean id class >
        <property name ref />
    </bean>
     */

    /*
    @Autowired相当于<property 标签配置对应的bean属性>
    自动装配注解的运作过程：
    1、从ioC容器中查找符合类型的组件对象，找到了多个就通过变量名作为beanId去找
    2、设置给当前属性（di）
     */
    //@Autowired  // 默认boolean required() default true;   必须有对应类型的组件
    // 佛系装配，允许ioC容器中没有对应类型的组件，定义如下。
    // 但是也不推荐使用佛系装配，因为装配的数据后期一般都有调用，比如这里调用show()，避免了ioC容器没有对应类型的报错但还有空指针的报错
    //@Autowired(required = false)
    //@Qualifier(value = "userServiceImpl")   // 指定要获取组件的beanId
    @Resource(name = "userServiceImpl") // @Autowired + @Qualifier(value = "beanId") = @resource(name = "beanId")
    private UserService userService;

    /*
    // 注解方式不需要set方法了，注解好自动关联赋值
    public void setUserService(UserService userService) {
        this.userService = userService;
    }
    */
    public void show() {
        // 调用业务层的show()
        String show = userService.show();
        System.out.println("show = " + show);

    }
}
